// // 属性的简写
// const foo="foo1"
// const baz = {foo}
// console.log(baz)

// // 方法简写
// const o={
//   method(){
//     return "Hello";
//   }
//   // method:function(){
//   //   return "Hello";
//   // }
// }
// console.log(o.method())

// let obj={
//   ['h' + 'ello'](){
//     return 'hi'
//   }
// }

// console.log(obj.hello())

// super关键字

// const proto={
//   foo:'hello'
// }

// const obj={
//   foo:'world',
//   find(){
//     return super.foo
//   }
// }
// Object. setPrototypeOf(obj,proto)//为obj设置原型对象
// console.log(obj.find())

// let { x,y,...z } ={ x:1,y:2,a:3,b:{c:888}}

// console.log(z)

// ES6 一共有 5 种方法可以遍历对象的属性。
// for...in：循环遍历对象自身的和继承的可枚举属性（不含 Symbol 属性）
// Object.keys(obj)：返回一个数组，包括对象自身的（不含继承的）所有可枚举属性（不含 Symbol 属性）的键名
// Object.getOwnPropertyNames(obj)：回一个数组，包含对象自身的所有属性（不含 Symbol 属性，但是包括不可枚举属性）的键名
// Object.getOwnPropertySymbols(obj)：返回一个数组，包含对象自身的所有 Symbol 属性的键名
// Reflect.ownKeys(obj)：返回一个数组，包含对象自身的（不含继承的）所有键名，不管键名是 Symbol 或字符串，也不管是否可枚举

// 严格判断是否相等
// console.log(Object.is(0,0))

// 对象合并
// const target={a:1,b:1}
// const source1={b:2,c:2}

// Object.assign(target,source1)
// console.log(target)

// // 返回指定对象所有自身属性（非继承属性）的描述对象
// const obj={
//   foo:123,
//   get bar(){return 'abc'}
// }

// console.log(Object.getOwnPropertyDescriptors(obj))


// function obj(){
//   console.log(111)
// }
// obj.prototype.aa=function(){
//   console.log(1111)
// }
// console.log(Object.getPrototypeOf(obj))

// // 返回一个对象自身的（不含继承的）所有可遍历属性的键值对的数组
// const obj={foo:'bar',baz:42}

// console.log(Object.entries(obj))

// console.log(Object.fromEntries([
//   ['foo','bar'],
//   ['baz',42]
// ]))






